package com.easyidea.its.domain.repository.base;

import java.io.Serializable;
import java.util.Collection;

/**
 * 
 * @author hukn
 * 
 * @param <T>
 */
public interface BaseBeanRepository<T> {

	T mergeBean(Object entity);

	/**
	 * 根据key值获取相应的持久化对象
	 * 
	 * @param id
	 * @param siteId
	 * @return
	 */
	T getBeanById(Serializable id);

	/**
	 * 持久化对象
	 * 
	 * @param <E>
	 * @param bean
	 */
	void saveOrUpdateBean(T bean);

	/**
	 * 持久化对象，并返回带ID的对象
	 * 
	 * @param <E>
	 * @param clazz
	 * @param bean
	 * @return
	 */
	T save(T bean);

	/**
	 * 物理删除对象
	 * 
	 * @param id
	 */
	void removeBean(Serializable id);

	/**
	 * 物理删除对象
	 * 
	 * @param bean
	 */
	void removeBean(T bean);

	/**
	 * 判断指定类的指定属性的唯一性。
	 * 
	 * @param propertyName
	 * @param propertyValue
	 * @param idpropertyName
	 * @param idValue
	 * @return
	 */
	boolean isRepeated(String propertyName, String propertyValue, String idpropertyName, Serializable idValue);

	<E> E getBeanByHQL(Class<E> clazz,String hql);

	<E> Collection<E> listBeansByHQL(Class<E> clazz,String hql, int firstResult, int maxResults);
}
